package com.atguigu.gmall.cart.service;

import com.atguigu.gmall.cart.mapper.CartMapper;
import com.atguigu.gmall.cart.pojo.Cart;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import org.checkerframework.checker.units.qual.A;
import org.checkerframework.checker.units.qual.C;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

/** 异步保存mysql数据库
 * 注意 异步方法类似于分布式事务 需要在不同的service方法中调用,使用动态代理技术
 * @author Jia Fa
 * @create 2021-12-20 0:06
 */
@Service
public class AsyncService {

    @Autowired
    private CartMapper cartMapper;

    @Async
    public void updateCartBySkuIdAndUserId(String userId,Cart cart, String skuId) {
        this.cartMapper.update(cart, new UpdateWrapper<Cart>().eq("sku_id", skuId).eq("user_id", cart.getUserId()));
//        int i =1/0;
    }

    @Async
    public void save(String userId,Cart cart) {
        this.cartMapper.insert(cart);
    }

    @Async
    public void delete(String userId) { // 既可以删除未登录也可以删除已登录购物车
//        this.cartMapper.deleteById(userId);   //deleteById 注意 这是根据主键进行删除,我们根据的是userId
        this.cartMapper.delete(new QueryWrapper<Cart>().eq("user_id", userId));
    }

    @Async
    public void deleteByUserIdAndSkuId(String userId, Long skuId) {
        this.cartMapper.delete(new UpdateWrapper<Cart>().eq("user_id", userId).eq("sku_id", skuId));
    }
}
